#include "string.h"
#include <assert.h>
void test_string()
{
    // string s0("Initial string");
    // string s1;
    // string s2(s0);
    // string s3(s0, 8, 3);
    // string s4("A character sequence");
    // string s5("Another character sequence", 12);
    // string s6a(10, 'x');
    // string s6b(10, 42);
    // s1.push_back('x');
    // std::cout << s1 << std::endl;
    // string s("initial");
    // s += 'x';
    // s += "aaa";
    // std::cout << s << std::endl;
    // s.pop_back();
    // s.resize(s.size() + 2, 'b');
    // std::cout << s << '\n';
    // string str = "to be question";
    // string str2 = "the ";
    // str.insert(6, str2);
    // std::cout << str << '\n';
    // str.insert(10, "to be ");
    // std::cout << str << '\n';
    // string str("This is an example sentence.");
    // str.erase(10, 8);
    // std::cout << str << '\n';
    // string str("This is an example sentence.");
    // string str2 = str.substr(11, 5);
    // std::cout << str2 << '\n';
    string str("hello, world");
    // 查找字符 'o'，从位置 0 开始 → 应返回 4
    size_t idx1 = str.find('o', 0);
    std::cout << "find('o', 0) = " << idx1 << " (期望: 4)" << std::endl;
    assert(idx1 == 4);

    // 查找字符 'o'，从位置 5 开始 → 应返回 8（第二个 o）
    size_t idx2 = str.find('o', 5);
    std::cout << "find('o', 5) = " << idx2 << " (期望: 8)" << std::endl;
    assert(idx2 == 8);

    // 查找字符 'z'，从任意位置 → 应返回 npos
    size_t idx3 = str.find('z', 0);
    std::cout << "find('z', 0) = " << idx3 << " (期望: npos)" << std::endl;
    assert(idx3 == string::npos);

    // 查找字符 'l'，从位置 3 开始 → 第一个 l 是 2，但从 3 开始第一个是 3
    size_t idx4 = str.find('l', 3);
    std::cout << "find('l', 3) = " << idx4 << " (期望: 3)" << std::endl;
    assert(idx4 == 3);

    // =============================
    // 测试 find(const char* s, pos)
    // =============================

    // 查找子串 "world"，从 pos 0 开始 → 应该找到，返回 7
    size_t idx5 = str.find("world", 0);
    std::cout << "find(\"world\", 0) = " << idx5 << " (期望: 7)" << std::endl;
    assert(idx5 == 7);

    // 查找子串 "lo"，从 pos 3 开始 → "lo" 出现在 index 3-4
    size_t idx6 = str.find("lo", 3);
    std::cout << "find(\"lo\", 3) = " << idx6 << " (期望: 3)" << std::endl;
    assert(idx6 == 3);

    // 查找子串 "abc"，不存在 → npos
    size_t idx7 = str.find("abc", 0);
    std::cout << "find(\"abc\", 0) = " << idx7 << " (期望: npos)" << std::endl;
    assert(idx7 == string::npos);

    // 查找子串 "o,"，从 pos 4 开始 → "o," 在 index 4-5
    size_t idx8 = str.find("o,", 4);
    std::cout << "find(\"o,\", 4) = " << idx8 << " (期望: 4)" << std::endl;
    assert(idx8 == 4);
}

int main()
{
    test_string();
    return 0;
}
